gusucode.com > VC++ 实现填充图像选区-源码程序 > VC++ 实现填充图像选区-源码程序/code/FillRCDlg.cpp
// FillRCDlg.cpp : implementation file // Download by http://www.NewXing.com #include "stdafx.h" #include "FillRC.h" #include "FillRCDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CFillRCDlg dialog CFillRCDlg::CFillRCDlg(CWnd* pParent /*=NULL*/) : CDialog(CFillRCDlg::IDD, pParent) { //{{AFX_DATA_INIT(CFillRCDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CFillRCDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CFillRCDlg) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CFillRCDlg, CDialog) //{{AFX_MSG_MAP(CFillRCDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CFillRCDlg message handlers BOOL CFillRCDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control } void CFillRCDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CFillRCDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDC *pDC = GetDC(); CRect itemRC(30, 30, 100, 120); //定义一个区域对象 CBrush brush(RGB(255, 128, 128)); //定义一个颜色画刷 pDC->FillRect(itemRC,&brush); //使用颜色填充区域 brush.DeleteObject(); //删除画刷对象 CBitmap bmp; //定义一个位图对象 bmp.LoadBitmap(IDB_BKBMP); //加载位图 brush.CreatePatternBrush(&bmp); //创建位图画刷 CRect bmpRC(110, 30, 200, 120); //定义一个区域对象 pDC->FillRect(bmpRC, &brush); //使用位图填充区域 bmp.DeleteObject(); //释放位图对象 brush.DeleteObject(); //释放画刷对象 CRect rectrc(210, 30, 300, 120); //定义一个区域对象 CRect hrc(280, 60, 350, 140); //定义一个区域对象 pDC->Rectangle(rectrc); //绘制矩形边框 pDC->Rectangle(hrc); //绘制矩形边框 HRGN hRect = CreateRectRgn(210,30,300,120); //创建一个矩形选区 HRGN hrgn = CreateRectRgn(280,60,350,140); //创建一个矩形选区 HRGN hret = CreateRectRgn(0,0,0,0); //创建选区 CombineRgn(hret,hRect,hrgn,RGN_AND); //组合选区,获取两个选区的公共部分 brush.CreateSolidBrush(RGB(255,0,0)); //创建一个颜色画刷 CRgn rgn; //定义一个选区对象 rgn.Attach(hret); //将选区对象附加一个选区句柄 pDC->FillRgn(&rgn,&brush); //填充选区 brush.DeleteObject(); //释放画刷对象 rgn.Detach(); //分离选区句柄 DeleteObject(hRect); //释放选区句柄 DeleteObject(hrc); //释放选区句柄 DeleteObject(hret); //释放选区句柄 CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CFillRCDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; }